package org.i1510.common.controller;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.validation.Valid;

import net.sf.json.JSONArray;

import org.i1510.common.bean.PageBean;
import org.i1510.common.bean.SessionUserBean;
import org.i1510.common.dao.ISysOrgDao;
import org.i1510.common.po.SysOrg;
import org.i1510.common.service.ISysOrgService;
import org.i1510.common.utils.KBProperties;
import org.i1510.common.utils.PrintWriterUtils;
import org.i1510.common.utils.StringUtils;
import org.i1510.common.utils.UserUtils;
import org.i1510.common.utils.web.ResultMapper;
import org.i1510.common.utils.web.WebUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping(value = "/admin/sysOrg")
public class SysOrgController {
    private static final Logger logger = LoggerFactory.getLogger(SysOrgController.class);
    @Autowired
    private ISysOrgService iSysOrgService;
    @Autowired
    private ISysOrgDao iSysOrgDao;
    
    private ResultMapper mapper;
    /**
     *@Author Rambo
     *@Desc：获取树结构
     *@param sysOrg
     *@param errors
     *@return TODO
     *@Version  SysOrgController.java,v 1.1 2013-11-15 下午4:20:56 
     */
     @RequestMapping(value = "/findTree", method = RequestMethod.POST)
     @ResponseBody
     public String findTree(HttpServletRequest request,HttpServletResponse response,@Valid @ModelAttribute("sysOrg") SysOrg sysOrg,BindingResult errors) {//获取当前用户session所属公司Name
 		
 		
    	Map conditions = new HashMap();
    	conditions.put("groupName", UserUtils.getSessionUserBean(request).getSysUser().getCompany());
		List  list = iSysOrgService.getAll(sysOrg, conditions);
		JSONArray jsonArray = new JSONArray();
		if (list.size() > 0) {
			jsonArray = JSONArray.fromObject(list);
		}
		PrintWriterUtils write = new PrintWriterUtils();
		write.sendPrintWriterUtils(response, jsonArray.toString(), "json");
		return null;
     }
    /**
    *@Author Rambo
    *@Desc：保存对象
    *@param sysOrg
    *@param errors
    *@return TODO
    *@Version  SysOrgController.java,v 1.1 2013-11-15 下午4:20:56 
    */
    @RequestMapping(value = "/save", method = RequestMethod.POST)
    @ResponseBody
    public String save(HttpServletRequest request,@Valid @ModelAttribute("sysOrg") SysOrg sysOrg,BindingResult errors) {
    	 ResultMapper mapper = ResultMapper.generateFailure();
        if(errors.hasErrors()){            
            mapper = WebUtils.getMapper4Errors(errors);
        }else{
        	//获取当前用户session所属公司Name
        	sysOrg.setGroupName(UserUtils.getSessionUserBean(request).getSysUser().getCompany());
        	//判断parentId 是否有效
        	if(null != sysOrg && !StringUtils.isStringEmpty(sysOrg.getParentId()) ){
        		//通过parentId 判断上级是否存在
        		SysOrg exist = iSysOrgService.findById(sysOrg.getParentId());
        		if(null != exist){
        			sysOrg.setParentId(exist.getDocId());
        			sysOrg.setParentName(exist.getDocSubject());
        		}else{
        			//理论上不应该到这里
        			sysOrg.setParentId("0000");//默认跟节点
        			sysOrg.setParentName("所有组织");
        		}

        		
                sysOrg.setDocStatus("10");
                if(null == sysOrg.getDocId() || sysOrg.getDocId().equals("")){
                	sysOrg.setDocId(sysOrg.getCode());
                	mapper = iSysOrgService.add(sysOrg,request);
                }else{
                	mapper = iSysOrgService.save(sysOrg,request);
                }
                
                
        	}else{
        		mapper.appendResult("message", "不存在该上级");
        	}
        	
        }
        
        return mapper.toJson();
    }
    
    /**
    *@Author Rambo
    *@Desc：删除对象
    *@param docId
    *@param errors
    *@return TODO
    *@Version  SysOrgController.java,v 1.1 2014-9-2 下午3:38:17 
    */
    @RequestMapping(value = "/deleteX", method = RequestMethod.POST)
    @ResponseBody
    public String deleteX(@Valid @ModelAttribute("docId") String docId,BindingResult errors) {
        
        if(errors.hasErrors()){            
            mapper = WebUtils.getMapper4Errors(errors);
        }else{
            mapper = iSysOrgService.delete(docId);
        }
        
        return mapper.toJson();
    }
    /**
    *@Author Rambo
    *@Desc：查看对象
    *@param docId
    *@param errors
    *@return TODO
    *@Version  SysOrgController.java,v 1.1 2014-9-2 下午3:39:35 
    */
    @RequestMapping(value = "/view", method = RequestMethod.GET)
    @ResponseBody
    public String view(@Valid @ModelAttribute("docId") String docId,BindingResult errors) {
        ResultMapper mapperRtn = ResultMapper.generateFailure();
        if(errors.hasErrors()){            
            mapperRtn = WebUtils.getMapper4Errors(errors);
        }else{
            SysOrg sysOrg = iSysOrgService.findById(docId);
            mapperRtn = ResultMapper.generateSuccess();
            mapperRtn.appendResult("data", sysOrg);
        }        
        return mapperRtn.toJson();
    }
	@RequestMapping(value = "/listExt", method = {RequestMethod.POST, RequestMethod.GET } )
	@ResponseBody
	public String listExt(HttpServletRequest request,@Valid @ModelAttribute("start") String start,@Valid @ModelAttribute("limit") String limit,@Valid @ModelAttribute("sysOrg") SysOrg sysOrg,@Valid @ModelAttribute("pageBean") PageBean pageBean,BindingResult errors) {
		ResultMapper mapperRtn = ResultMapper.generateFailure();
		if(errors.hasErrors()){			
			mapperRtn = WebUtils.getMapper4Errors(errors);
		}else{
			Map conditions = new HashMap();
	    	conditions.put("groupName", UserUtils.getSessionUserBean(request).getSysUser().getCompany());
			if(!"".equals(start) && !"".equals(limit)){
				pageBean.setIntPageIndex(StringUtils.String2Integer(start) !=0?(StringUtils.String2Integer(start)):0);
				pageBean.setIntPageSize(StringUtils.String2Integer(limit) !=0?(StringUtils.String2Integer(limit)):0);
			}else{
				pageBean.setIntPageIndex(0);
				pageBean.setIntPageSize(KBProperties.PAGESIZE);
			}
			
			List  list = iSysOrgService.getPage(sysOrg, pageBean,conditions);
			int totalCount =  iSysOrgService.getPageCount(sysOrg,conditions);
			
			mapperRtn = ResultMapper.generateSuccess();
			mapperRtn.appendResult("total", totalCount);
			mapperRtn.appendResult("root", list);
		}		
		return mapperRtn.toJson();
	}
    /**
    *@Author Rambo
    *@Desc：状态修改
    *@param request
    *@param docId
    *@param docStatus
    *@param errors
    *@return TODO
    *@Version  CateController.java,v 1.1 2014-9-11 上午10:06:04 
    */
    @RequestMapping(value = "/updateStatus", method = RequestMethod.POST)
    @ResponseBody
    public String updateStatus(HttpServletRequest request,@Valid @ModelAttribute("docId") String docId,@Valid @ModelAttribute("docStatus") String docStatus,BindingResult errors) {
        
        if(errors.hasErrors()){            
            mapper = WebUtils.getMapper4Errors(errors);
        }else{
            if(!StringUtils.isStringEmpty(docId)){
            	//判断下级是否存在，如果存在不允许删除
            	Map conditions = new HashMap();
            	conditions.put("parentId", docId);
            	if(iSysOrgService.getPageCount(null, conditions) > 0){
                    mapper = ResultMapper.generateFailure();
                    mapper.appendResult("messages", "下级有关联组织信息，不能删除!");
            	}else{
                    SysOrg sysOrg = new SysOrg();
                    
                    sysOrg.setDocId(docId);
                    sysOrg.setDocStatus(docStatus);
                    mapper = iSysOrgService.save(sysOrg,request);
            	}
            }else{
                mapper = ResultMapper.generateFailure();
                mapper.appendResult("messages", "无法找到该ID!");
            }
            
        }
        
        return mapper.toJson();
    }
}